# 用户 　创建一个名为User 的类，其中包含属性first_name 和last_name ，以及用户简介通常会存储的其他几个属性。
# 在类User 中定义一个名为describe_user() 的方法，用于打印用户信息摘要。
# 再定义一个名为greet_user() 的方法，用于向用户发出个性化的问候。
# 创建多个表示不同用户的实例，并对每个实例调用上述两个方法。

class User:
	"""用户信息概要"""

	def __init__(self, first, last, **user_info):
		"""初始化用户属性值"""
		self.first_name = first
		self.last_name = last 
		self.storage = {}				# 设置storage属性
		for k, v in user_info.items():	# //遍历赋值 **kw相当于dict，遍历取key，value
			self.storage[k] = self.storage.get(k, v) 	
			# 方法get()的第一个参数用于指定键，是必不可少的；第二个参数为指定的键不存在时要返回的值，是可选的
			# 当该方法前接空字典时，与for语句构成字典添加键值对方法，上述语句在self.storage属性列表中添加传入的任意参数对（**user_info）作为键值对
		# print(self.storage)	# 用于测试上述方法返回值是否正确
			# setattr(self, k, v)			# setattr() 设置新的属性	setattr(self, 'address', 'asia') 等价于  self.address = 'asia'

	def describe_user(self):
		"""打印用户信息摘要"""
		print(f"Your name:{self.first_name.title()} {self.last_name.title()}.")
		k_list = []
		for k in self.storage.keys():
			k_list.append(k)
		if len(k_list) > 0:
			print("Please check your extra information")
			for key in k_list:
				print(f"\t{key}: {self.storage[key]}")

	def greet_user(self):
		"""向用户发出个性化问候"""
		print(f"Welcome Your {self.first_name.title()} {self.last_name.title()}!")

user1 = User('Xiao', 'Li')
user1.describe_user()
user1.greet_user()

user2 = User('Wu', 'Hongyi', location='Fuzhou University', major='IC engineering')
user2.describe_user()
user2.greet_user()


user2 = User('Fritz', 'yi', location='Fuzhou University', major='IC engineering', role='graduate')
user2.describe_user()
user2.greet_user()
